package com.itheima.annotationclass;

import com.itheima.annotation.MyTest;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 用于解析注解
 * <p>
 * 需求：观察AnnotationTest1中的方法，带注解就运行，不带就不能执行
 */
public class AnnotationParse {

    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException {

        //底层使用反射解析注解

        //获取字节码文件对象
        Class clazz = AnnotationTest1.class;

        //获取其所有本类中声明的方法
        Method[] methods = clazz.getDeclaredMethods();

        //遍历数组，依次获取每一个方法
        for (Method thisMethod : methods) {
            System.out.println(thisMethod);
            System.out.println(thisMethod.isAnnotationPresent(MyTest.class));
            //判断当前方法上是否存在自定义的@MyTest注解
            if (thisMethod.isAnnotationPresent(MyTest.class)) {
                //获取注解
                MyTest annotation = thisMethod.getAnnotation(MyTest.class);
                //获取注解中的参数
                String aaa = annotation.aaa();
                boolean bbb = annotation.bbb();
                String[] ccc = annotation.ccc();
                //有注解，就执行
                thisMethod.setAccessible(true);
                thisMethod.invoke(clazz.newInstance());
            }
            //没注解不用例会
        }
    }
}
